package gsw.tool.common;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Build;
import android.os.Environment;
import android.util.Log;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
 * 图片操作类
 */
public class ToolBitmap {

    /**
     * 尺寸压缩
     * 加载大图之前，需要进行尺寸压缩
     * 注意：压缩比例可以设置任意值，但是实际压缩比例一定是2的n次方
     *
     * @param resources 资源
     * @param id        资源id
     * @param newWidth  压缩后的宽度
     * @param newHeight 压缩后的高度
     * @return 压缩后的Btmap
     */
    public static Bitmap sizeCompress(Resources resources, int id, float newWidth, float newHeight) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        //开始读入图片，此时把options.inJustDecodeBounds 设回true了
        options.inJustDecodeBounds = true;

        Bitmap bitmap = BitmapFactory.decodeResource(resources, id, options);
        options.inJustDecodeBounds = false;
        int w = options.outWidth;
        int h = options.outHeight;
        //缩放比。由于是固定比例缩放，只用高或者宽其中一个数据进行计算即可
        int sacle = (int) (w / newWidth > h / newHeight ? w / newWidth : h / newHeight);
        sacle = sacle <= 0 ? 1 : sacle;
        options.inSampleSize = sacle;//设置缩放比例
        //重新读入图片，注意此时已经把options.inJustDecodeBounds 设回false了
        bitmap = BitmapFactory.decodeResource(resources, id, options);
        return bitmap;
    }

    /**
     * 质量压缩
     * 质量压缩不能压缩图片内存，只能压缩图片的存储大小。
     * 另外，将质量压缩后的图片转化为二进制数据进行传输时，数据也变小了。比如微信分享图片
     *
     * @param bitmap         原图
     * @param compressFormat 图片类型：JPEG,PNG,WEBP;
     * @param quality        质量
     * @return 压缩后的Bitmap
     */
    public static Bitmap qualityCompress(Bitmap bitmap, Bitmap.CompressFormat compressFormat, int quality) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(compressFormat, quality, baos);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            bitmap.setConfig(Bitmap.Config.ARGB_8888);
            bitmap.setConfig(Bitmap.Config.RGB_565);
        }
        byte[] bytes = baos.toByteArray();
        Bitmap bm = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
        return bm;
    }

    /**
     * 设置图片色彩模式
     *
     * @param bitmap 位图
     * @param config 色彩模式，常用的：RGB_565,ARGB_4444ARGB_8888。
     * @return 返回图片大小
     */
    public static long setConfig(Bitmap bitmap, Bitmap.Config config) {
        if (bitmap == null) {
            return 0;
        }
        Bitmap newBitmap = bitmap.copy(config, true);
        long size = newBitmap.getByteCount();
        return size;
    }

}
